<?php

namespace CHOMP\SGIBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use CHOMP\SGIBundle\Entity\Incidente;
use CHOMP\SGIBundle\Entity\Comentario;
use CHOMP\SGIBundle\Entity\Estado;
use CHOMP\SGIBundle\Entity\Prioridad;
use CHOMP\SGIBundle\Entity\Empresa;
use CHOMP\SGIBundle\Entity\CuentaAnalitica;
use CHOMP\SGIBundle\Entity\Usuario;
use CHOMP\SGIBundle\Form\Type\IncidenteType;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;

class IncidentesController extends Controller {

    public function listarAction() {
// TODO: Revisar el caso de error que se produce al ejecutar un filtro cuando
// se está posicionado en una página que no sea la 1 (y el resultado sólo tiene
// una página.
        
        $incidentes = $this->getDoctrine()
                ->getRepository('CHOMPSGIBundle:Incidente')
                ->findAll();

        return $this->render('CHOMPSGIBundle:Incidentes:listar.html.twig', array('incidentes' => $incidentes));
    }

    public function verAction($id) {
        $incidente = $this->getDoctrine()
                ->getRepository('CHOMPSGIBundle:Incidente')
                ->find($id);

        return $this->render('CHOMPSGIBundle:Incidentes:ver.html.twig', array('incidente' => $incidente));
    }

    public function nuevoAction(Request $request) {
        $incidente = new Incidente();

        $comentario1 = new Comentario();
        $comentario1->setComentario('comentario1');
        $comentario2 = new Comentario();
        $comentario2->setComentario('comentario2');

        $incidente->addComentario($comentario1);
        $incidente->addComentario($comentario2);

        $form = $this->createForm(new IncidenteType(), $incidente);

        $form->handleRequest($request);

        if ($form->get('save')->isClicked()) {
            if ($form->isValid()) {

                $em = $this->getDoctrine()->getManager();
                $em->persist($incidente);
                $em->flush();

                //return $this->redirect($this->generateUrl('task_success'));
                return new Response('Incidente crado con el ID:' . $incidente->getId() . ' Titulo:' . $incidente->getTitulo());
            }
        }

        return $this->render('CHOMPSGIBundle:Incidentes:nuevo.html.twig', array(
                    'form' => $form->createView(),
                    'incidente' => $incidente));
    }

    public function editarAction(Request $request, $id) {
        $em = $this->getDoctrine()->getManager();
        $incidente = $em->getRepository('CHOMPSGIBundle:Incidente')->find($id);

        $form = $this->createForm(new IncidenteType(), $incidente);

        $form->handleRequest($request);

        if ($form->get('save')->isClicked()) {
            if ($form->isValid()) {

                $em->persist($incidente);
                $em->flush();

                //return new Response('Incidente modificado con el ID:'.$incidente->getId().' Titulo:'.$incidente->getTitulo());
                return $this->redirect($this->generateUrl('incidentes_listar'));
            }
        }

        return $this->render('CHOMPSGIBundle:Incidentes:editar.html.twig', array(
                    'form' => $form->createView(),
                    'incidente' => $incidente));
    }

    public function crearInicialAction() {
        $cuentaAnalitica1 = new CuentaAnalitica();
        $cuentaAnalitica1->setNombre('Cuenta analitica Empresa 1');
        $cuentaAnalitica1->setDescripcion('Cuenta analitica Empresa 1');
        $cuentaAnalitica1->setBorrado(false);
        $cuentaAnalitica2 = new CuentaAnalitica();
        $cuentaAnalitica2->setDescripcion('Cuenta analitica Empresa 2');
        $cuentaAnalitica2->setNombre('Cuenta analitica Empresa 2');
        $cuentaAnalitica2->setBorrado(false);

        $empresa1 = new Empresa();
        $empresa1->setNombre('Empresa 1');
        $empresa1->setDescripcion('Prueba empresa 1');
        $empresa1->setTelefono('1549165589');
        $empresa1->setDireccion('Viamonte 302');
        $empresa1->setBorrado(FALSE);

        $empresa2 = new Empresa();
        $empresa2->setNombre('Empresa 2');
        $empresa2->setDescripcion('Prueba empresa 2');
        $empresa2->setTelefono('1549165589');
        $empresa2->setDireccion('Viamonte 749');
        $empresa2->setBorrado(FALSE);

        $cuentaAnalitica1->setEmpresa($empresa1);
        $cuentaAnalitica2->setEmpresa($empresa2);

        $em = $this->getDoctrine()->getManager();
        $em->persist($empresa1);
        $em->persist($empresa2);
        $em->persist($cuentaAnalitica1);
        $em->persist($cuentaAnalitica2);
        $em->flush();

        /*  Crear Estados */
        $estado1 = new Estado();
        $estado1->setNombre("Abierto");
        $estado1->setBorrado(false);
        $estado1->setInicial(true);
        $estado1->setFinal(false);
        $estado2 = new Estado();
        $estado2->setNombre("Pendiente Usuario");
        $estado2->setBorrado(false);
        $estado2->setInicial(false);
        $estado2->setFinal(false);
        $estado3 = new Estado();
        $estado3->setNombre("Cerrado");
        $estado3->setBorrado(false);
        $estado3->setInicial(false);
        $estado3->setFinal(true);

        $em = $this->getDoctrine()->getManager();
        $em->persist($estado1);
        $em->persist($estado2);
        $em->persist($estado3);
        $em->flush();

        /*  Crear Prioridades */
        $prioridad1 = new Prioridad();
        $prioridad1->setNombre("Prioridad Baja");
        $prioridad1->setNroorden(1);
        $prioridad1->setSLA(3);
        $prioridad1->setBorrado(false);

        $prioridad2 = new Prioridad();
        $prioridad2->setNombre("Prioridad Media");
        $prioridad2->setNroorden(2);
        $prioridad2->setSLA(4);
        $prioridad2->setBorrado(false);

        $prioridad3 = new Prioridad();
        $prioridad3->setNombre("Prioridad Alta");
        $prioridad3->setNroorden(3);
        $prioridad3->setSLA(5);
        $prioridad3->setBorrado(false);

        $em = $this->getDoctrine()->getManager();
        $em->persist($prioridad1);
        $em->persist($prioridad2);
        $em->persist($prioridad3);
        $em->flush();

        $repository_empresa = $this->getDoctrine()->getRepository('CHOMPSGIBundle:Empresa');
        $empresa = $repository_empresa->findOneByNombre('Empresa 2');

        /*  Crear Usuarios */
        $date = new \DateTime('NOW');
        $usuario1 = new Usuario();
        $usuario1->setNombre("Fernando");
        $usuario1->setApellido("Pluss");
        $usuario1->setEmail("fernando@pluss.com.ar");
        $usuario1->setPassword("Usuario 1");
        $usuario1->setPasswordExpiryDate($date);
        $usuario1->setBorrado(false);
        $usuario1->setEstado(false);
        $usuario1->setLogin("Usuario1");
        $usuario1->setEmpresa($empresa);

        $em = $this->getDoctrine()->getManager();
        $em->persist($usuario1);
        $em->flush();

        /* Crear Incidente 1 */
        $incidente = new Incidente();
        $incidente->setTitulo('Un Incidente');


        $repository_estado = $this->getDoctrine()->getRepository('CHOMPSGIBundle:Estado');
        $repository_prioridad = $this->getDoctrine()->getRepository('CHOMPSGIBundle:Prioridad');
        $estado = $repository_estado->findOneByNombre('Abierto');
        $prioridad = $repository_prioridad->findOneByNombre('Prioridad Media');

        $incidente->setEstado($estado);
        $incidente->setPrioridad($prioridad);
        $incidente->setEmpresa($empresa);
        $incidente->setCuentaAnalitica($cuentaAnalitica1);
        $incidente->setCreador($usuario1);
        $incidente->setResponsableCliente($usuario1);


        $em = $this->getDoctrine()->getManager();

        $em->persist($incidente);

        $em->flush();

        return new Response('Created incidente id ' . $incidente->getId());
    }

}
